package net.ttddyy.evernote.rest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.social.evernote.connect.EvernoteConnectionFactory;
import org.springframework.social.evernote.connect.EvernoteOAuthToken;
import org.springframework.social.oauth1.AuthorizedRequestToken;
import org.springframework.social.oauth1.OAuth1Operations;
import org.springframework.social.oauth1.OAuth1Parameters;
import org.springframework.social.oauth1.OAuthToken;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
/**
* @author Tadaya Tsuyukubo
*/
@RestController
@RequestMapping("/oauth")
public class OAuthController {
@Autowired
private EvernoteConnectionFactory evernoteConnectionFactory;
@RequestMapping("/auth")
public Map<String, String> authorization(@RequestParam String callbackUrl,
@RequestParam(required = false) boolean preferRegistration,
@RequestParam(required = false) boolean supportLinkedSandbox) {
// obtain request token (temporal credential)
final OAuth1Operations oauthOperations = this.evernoteConnectionFactory.getOAuthOperations();
final OAuthToken requestToken = oauthOperations.fetchRequestToken(callbackUrl, null); // no additional param
// construct authorization url with callback url for client to redirect
final OAuth1Parameters parameters = new OAuth1Parameters();
if (preferRegistration) {
parameters.set("preferRegistration", "true"); // create account
}
if (supportLinkedSandbox) {
parameters.set("supportLinkedSandbox", "true");
}
final String authorizeUrl = oauthOperations.buildAuthorizeUrl(requestToken.getValue(), parameters);
final Map<String, String> map = new HashMap<String, String>();
map.put("authorizeUrl", authorizeUrl);
map.put("requestTokenValue", requestToken.getValue());
map.put("requestTokenSecret", requestToken.getSecret());
return map;
}
@RequestMapping("/accessToken")
public EvernoteOAuthToken obtainAccessToken(@RequestParam String oauthToken, @RequestParam String oauthVerifier,
@RequestParam String requestTokenSecret) {
final OAuthToken requestToken = new OAuthToken(oauthToken, requestTokenSecret);
final AuthorizedRequestToken authorizedRequestToken = new AuthorizedRequestToken(requestToken, oauthVerifier);
final OAuth1Operations oAuth1Operations = this.evernoteConnectionFactory.getOAuthOperations(); // EvernoteOAuth1Operations
final OAuthToken accessToken = oAuth1Operations.exchangeForAccessToken(authorizedRequestToken, null); // no additional param
return (EvernoteOAuthToken) accessToken;
}
}